package com.zhenmaitang.clinic_sys.service;

import com.zhenmaitang.clinic_sys.entity.DataScope;
import com.zhenmaitang.clinic_sys.entity.RoleDataScope;

import java.util.List;

/**
 * 数据权限服务接口
 */
public interface DataScopeService {
    
    /**
     * 获取所有数据权限
     */
    List<DataScope> getAllDataScopes();
    
    /**
     * 根据ID获取数据权限
     */
    DataScope getDataScopeById(Integer id);
    
    /**
     * 根据代码获取数据权限
     */
    DataScope getDataScopeByCode(String code);
    
    /**
     * 创建数据权限
     */
    DataScope createDataScope(DataScope dataScope);
    
    /**
     * 更新数据权限
     */
    DataScope updateDataScope(DataScope dataScope);
    
    /**
     * 删除数据权限
     */
    void deleteDataScope(Integer id);
    
    /**
     * 为角色分配数据权限
     */
    void assignDataScopeToRole(RoleDataScope roleDataScope);
    
    /**
     * 获取角色的数据权限
     */
    List<RoleDataScope> getDataScopesByRoleId(Integer roleId);
    
    /**
     * 获取用户的数据权限
     * @param userId 用户ID
     * @param resource 资源类型
     * @return 数据权限列表
     */
    List<DataScope> getUserDataScopes(Integer userId, String resource);
    
    /**
     * 检查用户是否有指定资源的数据权限
     * @param userId 用户ID
     * @param resource 资源类型
     * @param dataId 数据ID
     * @return 是否有权限
     */
    boolean hasDataPermission(Integer userId, String resource, Integer dataId);
    
    /**
     * 获取用户对指定资源的数据范围
     * @param userId 用户ID
     * @param resource 资源类型
     * @return 数据ID列表，如果有全部权限则返回null
     */
    List<Integer> getUserDataScope(Integer userId, String resource);
}